package automaty;

import java.awt.Color;

import komorki.Komorka;


import stany.State;
import stany.deksryptor.StanDrapieznika;



public class AutomatDrapeznik extends Automat<AutomatDrapeznik>{

	private Color lis = StanDrapieznika.LIS.getColor();
	private Color krolik = StanDrapieznika.KROLIK.getColor();
	private Color trawa = StanDrapieznika.TRAWA.getColor();
	private Color ziemia = StanDrapieznika.ZIEMIA.getColor();
	private Integer lisVal;
	private Integer krolikVal;
	private Integer trawaVal;
	private Integer ziemiaVal;
	
	public AutomatDrapeznik(int row, int column, Komorka[][] kom, State s) {
		super(row, column, kom, s);
		// TODO Auto-generated constructor stub
	}


	@Override
	protected void checkNeighbour(int row, int column) {
		map = komorki[row][column].map();

		
		//warunki dla lisa
		if(komorki[row][column].getColor().equals(lis)){
			lisVal = map.get(lis);
			krolikVal = map.get(krolik);
			//lis moze sie rozmnozyc
			if(lisVal != null && krolikVal != null && lisVal >= 1 && krolikVal >= 2){
				komorki[row][column].changeNeighbourState(krolik, lis);
			}//lis moze sie najesc
			else if(krolikVal != null && krolikVal >= 1){
				komorki[row][column].changeNeighbourState(krolik, trawa);
			}//lis umiera
			else{
				komorki[row][column].setColor(ziemia);
			}
		}//warunki dla krolika
		else if(komorki[row][column].getColor().equals(krolik)){
			krolikVal = map.get(krolik);
			trawaVal = map.get(trawa);
			//krolik moze sie rozmnowyc
			if(krolikVal != null && trawaVal != null && krolikVal >= 1 && trawaVal >=3){
				komorki[row][column].changeNeighbourState(trawa, krolik);
			}//krolik moze sie najesc
			else if(trawaVal != null && trawaVal >= 1){
				komorki[row][column].changeNeighbourState(trawa, ziemia);
			}//krolik umiera
			else{
				komorki[row][column].setColor(trawa);
			}
		}//warunki dla trawy
		else if(komorki[row][column].getColor().equals(trawa)){
			trawaVal = map.get(trawa);
			ziemiaVal = map.get(ziemia);
			if(trawaVal != null && ziemiaVal != null && trawaVal >= 1 && ziemiaVal >= 1){
				komorki[row][column].changeNeighbourState(ziemia, trawa);
			}
		}
	}


	@Override
	public AutomatDrapeznik getClone(int r, int c, Komorka[][] k) {
		// TODO Auto-generated method stub
		return new AutomatDrapeznik(r, c, k, state);
	}

}
